Image processing and neural networks are both paramount to machine learning. This markdown is a mere compilation of useful examples from the EBImage, imager, and mxnet R packages. The goal is to provide a summary of basic concepts of how images can be processed and submitted to a convolutional neural network in R.
Much of this code is borrowed directly from the below examples. Read the original documentation to learn much more:
- EBImage
- imager
- mxnet
For this example: EBImage, mxnet, ggplot2, imager, jpeg, pROC
# EBImage
source("https://bioconductor.org/biocLite.R")
biocLite("EBImage")
# mxnet
cran = getOption("repos")
cran["dmlc"] = "https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/R/CRAN/"
# https://github.com/dmlc
# https://github.com/dmlc/drat
options(repos = cran)
install.packages("mxnet")
library(mxnet)
# ggplot2, imager, jpeg, pROC
install.packages(c("ggplot2", "imager", "jpeg", "pROC"))
Library
library(EBImage)
library(mxnet)
library(ggplot2)
library(imager)
## Loading required package: plyr
## Loading required package: magrittr
##
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
##
## add
## The following object is masked from 'package:plyr':
##
## liply
## The following objects are masked from 'package:EBImage':
##
## channel, dilate, display, erode, resize, watershed
## The following objects are masked from 'package:stats':
##
## convolve, spectrum
## The following object is masked from 'package:graphics':
##
## frame
## The following object is masked from 'package:base':
##
## save.image
library(jpeg)
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following object is masked from 'package:imager':
##
## ci
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
Be sure to also check out:
# h2o - https://www.h2o.ai/
install.packages("h2o")
library(h2o)
# keras - https://keras.rstudio.com/
install.packages("keras")
library(keras)
# install_keras(method = "conda")
install_keras()
# tensorflow - https://tensorflow.rstudio.com/tensorflow/articles/installation.html
install.packages("tensorflow")
library(tensorflow)
install_tensorflow()
koi_fish_EB = EBImage::readImage("/Users/evan.muzzall/Desktop/ml_images/images/image_001.jpg") # load fullsize color image
class(koi_fish_EB)
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
koi_fish_EB
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
par(mfrow=c(1,2)); plot(koi_fish_EB)
# imageData(koi_fish_EB)
koi_fish = imager::load.image("/Users/evan.muzzall/Desktop/ml_images/images/image_001.jpg") # same image
class(koi_fish) # different class? # http://www.cimg.eu/
## [1] "cimg" "imager_array" "numeric"
koi_fish
## Image. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 3
plot(koi_fish)
# as.array(koi_fish)
# shorter names
koiEB = koi_fish_EB
koi = koi_fish
plot(koiEB)
plot(max(koiEB) - koiEB) # do math stuff! (see below)
par(mfrow=c(1,1)); hist(koiEB, lwd = 2) # RGB intensity
# View image data
attributes(koiEB)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 2
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
attributes(koi)
## $class
## [1] "cimg" "imager_array" "numeric"
##
## $dim
## [1] 1125 750 1 3
# + / - brightness
koiEB1 = koiEB + 0.5
koiEB2 = koiEB - 0.5
par(mfrow=c(1,2)); plot(koiEB1); plot(koiEB2)
# * contrast
koiEB3 = koiEB * 0.25
koiEB4 = koiEB * 5
plot(koiEB3); plot(koiEB4)
# ^ gamma correction
koiEB5 = koiEB ^ 10
koiEB6 = koiEB ^ 0.75
plot(koiEB5); plot(koiEB6)
# flip, rotate, translate, rotate/translate
koiEB7 = flip(koiEB)
koiEB8 = rotate(koiEB, 45)
koiEB9 = translate(koiEB, c(500, 0))
koiEB10 = translate(rotate(koiEB, 45), c(0, 500))
par(mfrow=c(1,4)); plot(koiEB7); plot(koiEB8); plot(koiEB9); plot(koiEB10)
# grayscale frames
koiEB9 = koiEB
koiEB9 # frames.render
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
colorMode(koiEB9) = Grayscale
par(mfrow=c(1,1)); plot(koiEB9)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
plot(koiEB9, all = T)
attributes(koiEB9)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 0
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
# imageData(koiEB9)
# load a URL!
cartoon = load.image("https://carboncostume.com/wordpress/wp-content/uploads/2013/04/Calvin-and-Hobbes.jpg")
plot(cartoon)
# basic info
plot(koi) # coordinates appear, etc.
# what is noise?
# set.seed(1)
noise = array(runif(5*5*5*3),c(5,5,5,3)) #5x5 pixels, 5 frames, 3 colors. All noise
# the color channel comma cascade:
noise[,,,1] # multiple frames of a single color channel
## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.42289936 0.461423406 0.8129886 0.2210275 0.4620784
## [2,] 0.40302516 0.749400584 0.7190511 0.8867899 0.8737412
## [3,] 0.51119138 0.239006998 0.8421536 0.1959930 0.5187671
## [4,] 0.12635251 0.889835855 0.4998768 0.1905074 0.4151248
## [5,] 0.05862436 0.009732695 0.6149816 0.3271689 0.4379729
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.4893118 0.076069041 0.41266709 0.73516166 0.29364678
## [2,] 0.3568538 0.849476590 0.96371256 0.98431079 0.02999508
## [3,] 0.8934801 0.823736425 0.96463687 0.09413228 0.58111664
## [4,] 0.4659299 0.006661079 0.06439909 0.69535631 0.49707094
## [5,] 0.2054474 0.054568708 0.01227271 0.35198267 0.99888311
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.4611789 0.7924488 0.80911355 0.4250583 0.33112350
## [2,] 0.1432196 0.3371119 0.15051829 0.5518386 0.89018509
## [3,] 0.6709735 0.8832837 0.04084529 0.4574035 0.10410837
## [4,] 0.1648063 0.8896689 0.81189513 0.3927776 0.95546315
## [5,] 0.1765627 0.1021354 0.34989084 0.6568078 0.03215145
##
## , , 4
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.1937568 0.13543713 0.9223618 0.81899681 0.37638112
## [2,] 0.6891934 0.65639702 0.7911908 0.03359141 0.69528128
## [3,] 0.7154739 0.30159259 0.8567567 0.35487887 0.08735151
## [4,] 0.6640272 0.02826214 0.1961309 0.81157768 0.53029802
## [5,] 0.4550723 0.99504998 0.7076785 0.01614826 0.81730205
##
## , , 5
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.07715914 0.6859131 0.2478595 0.9354379 0.9605738
## [2,] 0.40425441 0.6207836 0.3124714 0.7575222 0.4674336
## [3,] 0.30100509 0.6044773 0.3155902 0.1444595 0.2327452
## [4,] 0.59039578 0.5746220 0.8429882 0.3211364 0.9979622
## [5,] 0.92269166 0.6919007 0.6664017 0.2664458 0.2175996
noise[,,1,1] # single frame
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.42289936 0.461423406 0.8129886 0.2210275 0.4620784
## [2,] 0.40302516 0.749400584 0.7190511 0.8867899 0.8737412
## [3,] 0.51119138 0.239006998 0.8421536 0.1959930 0.5187671
## [4,] 0.12635251 0.889835855 0.4998768 0.1905074 0.4151248
## [5,] 0.05862436 0.009732695 0.6149816 0.3271689 0.4379729
noise[,1,1,1] # col
## [1] 0.42289936 0.40302516 0.51119138 0.12635251 0.05862436
noise[1,,1,1] # row
## [1] 0.4228994 0.4614234 0.8129886 0.2210275 0.4620784
noise = as.cimg(noise) # convert it back to handy cimg format
plot(noise) #, frame = 2)
## Warning in plot.cimg(noise): Showing first frame
# make a grayscale copy
koi_g = grayscale(koi)
plot(koi_g)
# convert to data frame
koi_df = as.data.frame(koi)
head(koi_df) # aha! we have an xy coordinate, color channel, and pixel value
## x y cc value
## 1 1 1 1 0.1529412
## 2 2 1 1 0.1529412
## 3 3 1 1 0.1568627
## 4 4 1 1 0.1568627
## 5 5 1 1 0.1568627
## 6 6 1 1 0.1607843
koi_df = plyr::mutate(koi_df, channel = factor(cc, labels=c("Red","Green", "Blue")))
head(koi_df) # relabel color channel
## x y cc value channel
## 1 1 1 1 0.1529412 Red
## 2 2 1 1 0.1529412 Red
## 3 3 1 1 0.1568627 Red
## 4 4 1 1 0.1568627 Red
## 5 5 1 1 0.1568627 Red
## 6 6 1 1 0.1607843 Red
# Look at rgb channels of the color image
ggplot(koi_df, aes(value, fill = channel)) +
geom_histogram(bins=30) +
facet_wrap(~ channel) +
theme_minimal() +
guides(fill = F)
# gradients
gr = imgradient(koi_g,"xy")
gr
## Image list of size 2
plot(gr)
# pixsets
pix = koi_g > .6 # Select pixels with high luminance
pix
## Pixel set of size 80688. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 1
plot(pix)
# highlight contours using pixel sets
pix = (isoblur(koi_g, 4) > .5 )
highlight(pix)
# highlight certain areas
plot(koi_g)
# Start the fill at location (900,400). sigma sets the tolerance
px.flood(koi_g,900, 400,sigma=.35) %>% highlight
# or, just plot boundaries
plot(boundary(pix))
# basic morphological image processing - https://www.cs.auckland.ac.nz/courses/compsci773s1c/lectures/ImageProcessing-html/topic4.htm
plot(koi)
highlight(pix)
#Grow by 5 pixels
grow(pix,5) %>% highlight(col="green", lwd = 3)
#Shrink by 5 pixels
shrink(pix,5) %>% highlight(col="blue", lwd = 3)
#Below is a replication of Taweh Beysolow II / gwens CNN instructions:
#https://github.com/Apress/intro-to-deep-learning-using-r
#Downloading the strings of the image files in each directory
fish_photos = list.files("/Users/evan.muzzall/Desktop/ml_images/images")
fish_photos
## [1] "image_001.jpg" "image_002.jpg" "image_003.jpg" "image_004.jpg"
## [5] "image_005.jpg" "image_006.jpg" "image_007.jpg" "image_008.jpg"
## [9] "image_009.jpg" "image_010.jpg" "image_011.jpg" "image_012.jpg"
## [13] "image_013.jpg" "image_014.jpg" "image_015.jpg" "image_016.jpg"
## [17] "image_017.jpg" "image_018.jpg" "image_019.jpg" "image_020.jpg"
#Preprocessing
#Downloading the image data
img_data = data.frame()
#Turning Photos into Bitmaps
for (i in 1:length(fish_photos)){
img = readJPEG(paste("/Users/evan.muzzall/Desktop/ml_images/images/", fish_photos[i], sep = ""))
#Reshape to 64x64 pixel size and grayscale image
img = Image(img, dim = c(64, 64), color = "grayscale")
#Resizing Image to 28x28 Pixel Size
img = Image(img, dim = c(28, 28))
img = img@.Data
#Transforming to vector
img = as.vector(t(img))
#Adding Label
label = 1
img = c(label, img)
#Appending to List
img_data = rbind(img_data, img)
}
#Transforming data into matrix for input into CNN
training_set = data.matrix(img_data)
training_set = as.data.frame(training_set)
# names(training_set)
training_set$X1 = c(c(rep(1,15), rep(0,5))) # quickly relabel class: koi (1) or not koi (0).
set.seed(1)
#Cross Validating Results
rows = sample(1:nrow(training_set), nrow(training_set)*.75)
rows
## [1] 6 8 11 16 4 14 15 9 19 1 3 2 20 10 5
#Training Set
x_train = t(training_set[rows, -1])
y_train = training_set[rows, 1]
dim(x_train) = c(28,28, 1, ncol(x_train))
#Test Set
x_test = t(training_set[-rows, -1])
y_test = training_set[-rows, 1]
dim(x_test) = c(28,28, 1, ncol(x_test))
#####################################
#Building Convolutional Neural Network
#We will use a LeNet Architecture for this example. Readers may feel free to experiment by using alternative arhcitectures
# this example uses a sigmoid activation type
data = mx.symbol.Variable('data')
#Layer 1
convolution_l1 = mx.symbol.Convolution(data = data, kernel = c(5,5), num_filter = 20)
sigmoid_l1 = mx.symbol.Activation(data = convolution_l1, act_type = "sigmoid")
pooling_l1 = mx.symbol.Pooling(data = sigmoid_l1, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Layer 2
convolution_l2 = mx.symbol.Convolution(data = pooling_l1, kernel = c(3,3), num_filter = 10)
sigmoid_l2 = mx.symbol.Activation(data = convolution_l2, act_type = "sigmoid")
pooling_l2 = mx.symbol.Pooling(data = sigmoid_l2, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Fully Connected 1
fl = mx.symbol.Flatten(data = pooling_l2)
full_conn1 = mx.symbol.FullyConnected(data = fl, num_hidden = 500)
sigmoid_l3 = mx.symbol.Activation(data = full_conn1, act_type = "sigmoid")
#Fully Connected 2
full_conn2 = mx.symbol.FullyConnected(data = sigmoid_l3, num_hidden = 40)
#Softmax Classification Layer
CNN = mx.symbol.SoftmaxOutput(data = full_conn2)
##################################################################################################
#Model Training and Parameter Tuning
mx.set.seed(1)
#Learning Rate Parameter
AUC = c()
learn_rate = c(0.01, 0.02, 0.03, 0.10)
CPU = mx.cpu()
for (i in 1:length(learn_rate)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = learn_rate[i],
momentum = 0.9, eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC = append(AUC, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.2
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.2
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.2
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.2
## [7] Train-accuracy=0.2
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.933333333333333
## [37] Train-accuracy=0.933333333333333
## [38] Train-accuracy=0.933333333333333
## [39] Train-accuracy=0.933333333333333
## [40] Train-accuracy=0.933333333333333
## [41] Train-accuracy=0.933333333333333
## [42] Train-accuracy=0.933333333333333
## [43] Train-accuracy=0.933333333333333
## [44] Train-accuracy=0.933333333333333
## [45] Train-accuracy=0.933333333333333
## [46] Train-accuracy=0.933333333333333
## [47] Train-accuracy=0.933333333333333
## [48] Train-accuracy=0.933333333333333
## [49] Train-accuracy=0.933333333333333
## [50] Train-accuracy=0.933333333333333
# learn about momentum and learning rate adaptation here:
# https://www.willamette.edu/~gorr/classes/cs449/momrate.html
#Plotting AUC
plot(learn_rate, AUC, main = "AUC for CNN \n Training Learning Rate Parameter", xlab = "learning rate",
ylab = "AUC Score", type = "l", col = "cadetblue")
#Momentum Parameter
mx.set.seed(1)
AUC1 = c()
mom = c(0.5, 0.9, 1.5)
CPU = mx.cpu()
for (i in 1:length(mom)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = 0.04,
momentum = mom[i], eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC1 = append(AUC1, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.2
## [16] Train-accuracy=0.2
## [17] Train-accuracy=0.2
## [18] Train-accuracy=0.2
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
#Plotting AUC
plot(mom, AUC1, main = "AUC for CNN \n Training Momentum Parameter", xlab = "momentum",
ylab = "AUC Score", type = "l", col = "cadetblue")
##################################################################################################
#Fitted Model Training
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 150, array.batch.size = 40,
learning.rate = 0.04, momentum = 0.9, eval.metric = mx.metric.accuracy,
optimizer = "sgd")
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## [51] Train-accuracy=0.8
## [52] Train-accuracy=0.8
## [53] Train-accuracy=0.8
## [54] Train-accuracy=0.8
## [55] Train-accuracy=0.8
## [56] Train-accuracy=0.8
## [57] Train-accuracy=0.8
## [58] Train-accuracy=0.8
## [59] Train-accuracy=0.8
## [60] Train-accuracy=0.8
## [61] Train-accuracy=0.8
## [62] Train-accuracy=0.8
## [63] Train-accuracy=0.8
## [64] Train-accuracy=0.8
## [65] Train-accuracy=0.8
## [66] Train-accuracy=0.8
## [67] Train-accuracy=0.8
## [68] Train-accuracy=0.8
## [69] Train-accuracy=0.8
## [70] Train-accuracy=0.8
## [71] Train-accuracy=0.8
## [72] Train-accuracy=0.8
## [73] Train-accuracy=0.8
## [74] Train-accuracy=0.8
## [75] Train-accuracy=0.8
## [76] Train-accuracy=0.8
## [77] Train-accuracy=0.8
## [78] Train-accuracy=0.8
## [79] Train-accuracy=0.8
## [80] Train-accuracy=0.8
## [81] Train-accuracy=0.8
## [82] Train-accuracy=0.8
## [83] Train-accuracy=0.8
## [84] Train-accuracy=0.8
## [85] Train-accuracy=0.8
## [86] Train-accuracy=0.8
## [87] Train-accuracy=0.8
## [88] Train-accuracy=0.8
## [89] Train-accuracy=0.8
## [90] Train-accuracy=0.8
## [91] Train-accuracy=0.8
## [92] Train-accuracy=0.8
## [93] Train-accuracy=0.8
## [94] Train-accuracy=0.8
## [95] Train-accuracy=0.8
## [96] Train-accuracy=0.8
## [97] Train-accuracy=0.8
## [98] Train-accuracy=0.8
## [99] Train-accuracy=0.8
## [100] Train-accuracy=0.8
## [101] Train-accuracy=0.8
## [102] Train-accuracy=0.8
## [103] Train-accuracy=0.8
## [104] Train-accuracy=0.8
## [105] Train-accuracy=0.8
## [106] Train-accuracy=0.8
## [107] Train-accuracy=0.8
## [108] Train-accuracy=0.8
## [109] Train-accuracy=0.8
## [110] Train-accuracy=0.8
## [111] Train-accuracy=0.8
## [112] Train-accuracy=0.8
## [113] Train-accuracy=0.8
## [114] Train-accuracy=0.8
## [115] Train-accuracy=0.8
## [116] Train-accuracy=0.8
## [117] Train-accuracy=0.8
## [118] Train-accuracy=0.8
## [119] Train-accuracy=0.8
## [120] Train-accuracy=0.8
## [121] Train-accuracy=0.8
## [122] Train-accuracy=0.8
## [123] Train-accuracy=0.8
## [124] Train-accuracy=0.8
## [125] Train-accuracy=0.8
## [126] Train-accuracy=0.8
## [127] Train-accuracy=0.8
## [128] Train-accuracy=0.8
## [129] Train-accuracy=0.8
## [130] Train-accuracy=0.8
## [131] Train-accuracy=0.8
## [132] Train-accuracy=0.8
## [133] Train-accuracy=0.8
## [134] Train-accuracy=0.8
## [135] Train-accuracy=0.8
## [136] Train-accuracy=0.8
## [137] Train-accuracy=0.8
## [138] Train-accuracy=0.8
## [139] Train-accuracy=0.8
## [140] Train-accuracy=0.8
## [141] Train-accuracy=0.8
## [142] Train-accuracy=0.8
## [143] Train-accuracy=0.8
## [144] Train-accuracy=0.8
## [145] Train-accuracy=0.8
## [146] Train-accuracy=0.8
## [147] Train-accuracy=0.8
## [148] Train-accuracy=0.8
## [149] Train-accuracy=0.8
## [150] Train-accuracy=0.8
#Calculating Training Set Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_train), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_train), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 3 controls (as.factor(y_train) 0) < 12 cases (as.factor(y_train) 1).
## Area under the curve: 0.5
curve = roc(as.factor(y_train), as.numeric(Labels))
#Plotting Results
plot(curve, main = "ROC Curve for Convolutional Neural Network \n Train Set")
#Calculating Test Set Accuracy
y_h = predict(cnn_model, x_test)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_test), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_test), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 2 controls (as.factor(y_test) 0) < 3 cases (as.factor(y_test) 1).
## Area under the curve: 0.5
curve1 = roc(as.factor(y_test), as.numeric(Labels))
#Plotting Results
plot(curve1, main = "ROC Curve for Convolutional Neural Network \n Test Set")